use std::env;
use std::process;
use minigrep::{Config, run};


/// 关注分离：main.rs只管程序允许， lib.rs负责程序的逻辑
/// 二进制项目main函数的作用：
/// 1. 获取命令行的值
/// 2. 设置其他的配置值（调用lib.rs的其他配置函数）
/// 3. 调用run执行逻辑
/// 4. 异常处理
fn main() {
    // unwrap_or_else解析Result，如果结果OK直接返回结果，否则执行传入的闭包函数，“|err|”声明闭包的参数
    let config = Config::build(env::args()).unwrap_or_else(|err|{
        // 标准错误只打印到屏幕上
        eprintln!("Problem parsing argument {err}");
        process::exit(1);
    });
    // 使用if let 处理遇到的异常，效果等价于 unwrap_or_else。但是run没有有意义的返回值，就使用if let
    if let Err(e) = run(config){
        eprintln!("Application error: {e}");
        process::exit(1);
    }
}
